<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * HITI AdminCP Global Functions Helpers
 *
 * @package     HITI AdminCP Project
 * @since       Monday, October 21, 2013, 6:00 PM
 * @final
 * @category    Helpers
 * @author      PHUOCNGUYEN - HITI Dev Team
 * @copyright   Copyright (c) 2013, HITI Corp
 */

$GLOBALS['modules_groups'] = array(
    array(
        'name' => 'Cấu hình',
        'icon' => 'icon glyphicons white cogwheels',
        'enable' => 1
    ),
    array(
        'name' => 'Sản phẩm',
        'icon' => 'icon glyphicons white inbox',
        'enable' => 1
    ),
    array(
        'name' => 'Mở rộng',
        'icon' => 'icon glyphicons white share_alt',
        'enable' => 1
    ),
    array(
        'name' => 'Bài viết',
        'icon' => 'icon glyphicons white blog',
        'enable' => 0
    ),
    array(
        'name' => 'Báo cáo',
        'icon' => 'icon glyphicons white stats',
        'enable' => 0
    ),
    array(
        'name' => 'Bán hàng',
        'icon' => 'icon glyphicons white shopping_cart',
        'enable' => 0
    ),
    array(
        'name' => 'Dự án',
        'icon' => 'icon glyphicons white building',
        'enable' => 0
    ),
    array(
        'name' => 'Hỏi đáp',
        'icon' => 'icon glyphicons white conversation',
        'enable' => 0
    ),
);
$GLOBALS['cfg'] = array(
    'title' => '',
    'news_image_width' => NEWS_IMG_W,
    'news_image_height' => NEWS_IMG_H,
    'news_thumb_width' => NEWS_THUMB_W,
    'news_thumb_height' => NEWS_THUMB_H,
    'news_gallery_width' => NEWS_GALLERY_W,
    'news_gallery_height' => NEWS_GALLERY_H,
    'prod_image_width' => PROD_IMG_W,
    'prod_image_height' => PROD_IMG_H,
    'prod_thumb_width' => PROD_THUMB_W,
    'prod_thumb_height' => PROD_THUMB_H,
    'prod_gallery_width' => PROD_GALLERY_W,
    'prod_gallery_height' => PROD_GALLERY_H,
    'proj_image_width' => PROJ_IMG_W,
    'proj_image_height' => PROJ_IMG_H,
    'proj_thumb_width' => PROJ_THUMB_W,
    'proj_thumb_height' => PROJ_THUMB_H,
    'proj_gallery_width' => PROJ_GALLERY_W,
    'proj_gallery_height' => PROJ_GALLERY_H,
    'video_image_width' => VIDEO_IMG_W,
    'video_image_height' => VIDEO_IMG_H,
    'video_thumb_width' => VIDEO_THUMB_W,
    'video_thumb_height' => VIDEO_THUMB_H,
    'video_gallery_width' => VIDEO_GALLERY_W,
    'video_gallery_height' => VIDEO_GALLERY_H,
    'serv_image_width' => SERV_IMG_W,
    'serv_image_height' => SERV_IMG_H,
    'serv_thumb_width' => SERV_THUMB_W,
    'serv_thumb_height' => SERV_THUMB_H,
    'serv_gallery_width' => SERV_GALLERY_W,
    'serv_gallery_height' => SERV_GALLERY_H,
);
$GLOBALS['orders_status'] = array(
    'Chờ xác nhận',
    'Xác nhận thành công',
    'Xác nhận thất bại',
    'Đã thanh toán',
    'Chưa thanh toán',
    'Chưa giao hàng',
    'Đang giao hàng',
    'Đã giao hàng',
    'Đã hủy'
);
$GLOBALS['orders_color'] = array(
    '#EC891F',
    '#773937',
    '#28ABF6',
    '#015A86',
    '#34B700',
    '#B1B1B1',
    '#FF9522',
    '#E50D0D'
);
$GLOBALS['product_properties_groups'] = array(
    'xuatxu' => 'Xuất xứ',
    'bh' => 'Bảo hành',
    'tinhtrang' => 'Tình trạng',
    'size' => 'Size',
    'color' => 'Màu sắc'
);
$GLOBALS['config_groups'] = array(
    array('Website', 1),
    array('Công ty', 1),
    array('Sản phẩm', 1),
    array('Tin tức', 1),
    array('Mạng xã hội', 1),
    array('Emails', 1),
    array('SEO', 1),
    array('Ảnh', 1),
    array('Thanh toán', 1)
);
$GLOBALS['interfaces_groups'] = array(
    array('Logo & Banner', 1),
    array('Slider', 1),
    array('Background', 1),
    array('Quảng cáo', 1),
    array('Text color', 1)
);
$GLOBALS['browsers'] = array(
    'Internet Explorer',
    'Chrome',
    'Firefox',
    'Safari',
    'Opera',
    'unknown'
);
$GLOBALS['warehouse_cancel_reason'] = array(
    'Hư hỏng',
    'Hết hạn'
);
$GLOBALS['viewall'] = array(
    '-1' => 'Chọn ...',
    '0' => 'Chi nhánh cơ sở',
    '1' => 'Toàn bộ công ty'
);
$GLOBALS['getnews']['source'] = array(
    'landtoday' => array(
        'name' => 'LandToday',
        'logo' => 'landtoday-logo.gif',
        'cat_list_url' => 'http://landtoday.net/web/modules/news/news_search.aspx?num=100000&p=1&cate={var1}&fromdate={var2}&todate={var3}',
        'cat_list_id' => array(
            '98' => 'Tin tức - Sự kiện',
            '93' => 'Phong thủy'
        ),
        'news_url' => 'http://landtoday.net/vn/1/{var1}/1.aspx',
        'news_content_begin' => '<div id="content" class="content">',
        'news_content_end' => '</div>',
        'news_des_begin' => '',
        'news_des_end' => '',
    ),
    'bdsvnexpress' => array(
        'name' => 'BĐS Kinh doanh VNExpress.net',
        'view_form' => 'bdsvnexpress',
        'logo' => 'logo_vne_2014.png',
        'cat_list_url' => 'http://kinhdoanh.vnexpress.net/tin-tuc/bat-dong-san/page/1.html',
        'cat_list_preg' => 'class="list_news"',
        'news_url' => '',
        'news_content_begin' => '<div class="fck_detail">',
        'news_content_end' => '<script type="text/javascript">',
        'news_des_begin' => '<div class="short_intro txt_666">',
        'news_des_end' => '</div>',
    )
);

// ------------------------------------------------------------------------

/**
 * Hàm token_validation
 *
 * Kiểm tra giá trị biến post token và session token
 *
 * @access  public
 * @return  true/false
 */
if ( ! function_exists('token_validation'))
{
    function token_validation()
    {
        $ci =& get_instance();
        return ($ci->input->post('token', true) == $ci->session->userdata('token'));
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm write_log
 *
 * Ghi log thao tác một user trong admin cp
 *
 * @access  public
 * @param   log keyword
 * @param   log value
 * @return  null
 */
if ( ! function_exists('write_log'))
{
    function write_log($log, $log_val = '')
    {
    	$ci =& get_instance();
        $ci->db->query("SET NAMES 'LATIN1'");
        $info_log = explode('_', $log);
        if (count($info_log) == 1)
        {
            $info_log[0] = $log;
            $info_log[1] = '';
        }
        $do = array(
            'add' => 'Thêm mới',
            'update' => 'Cập nhập',
            'del' => 'Xóa',
            'remove' => 'Xóa vĩnh viên',
            'restore' => 'Khôi phục',
            'report' => 'Gửi báo cáo',
            'login' => 'Đăng nhập hệ thống',
            'logout' => 'Đăng xuất hệ thống',
            'permiss' => 'Phân quyền truy cập'
        );
        if (!empty($do[$info_log[0]]))
        {
            $log = $do[$info_log[0]].' '.get_data('modules', "file = '{$info_log[1]}'", 'name_en');
        }
    	$data = array(
    		'user' => $ci->session->userdata('user_id'),
    		'log' => $log,
    		'log_val' => $log_val,
            'date_added' => date(TIME_SQL),
    		'ip' => $ci->input->ip_address()
    	);
        $ci->db->insert('userlogs', $data);
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm get_data
 *
 * Lấy giá trị của một field hoặc tất cả field từ bảng dữ liệu
 *
 * @access  public
 * @param   table name
 * @param   [, where condition = '']
 * @param   [, field = *]
 * @param   [, start = '']
 * @param   [, limit = '']
 * @param   [, order = '']
 * @return  field value if (field='field name')
 * @return  data array if (field='*')
 */
if ( ! function_exists('get_data'))
{
    function get_data($table, $where = '', $field = '*', $start = '', $limit = '', $order = '')
    {
    	$ci =& get_instance();
    	if($field != '*') $ci->db->select($field);
    	if($where != "") $ci->db->where($where);
        if($order != "") $ci->db->order_by($order);
        if (is_numeric($start) && is_numeric($start)) $ci->db->limit($limit, $start);
    	$q = $ci->db->get($table);
        if ($q->num_rows() > 0)
        {
        	$data = $q->row_array();
        	if ($field != '*') return $data[$field];
        	else return $data;
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm check_rights
 *
 * Kiểm tra quyền truy cập module quản lý
 *
 * @access  public
 * @param   module file (don't included .php)
 * @return  true/false
 */
if ( ! function_exists('check_rights'))
{
    function check_rights($act = '', $do = 'view')
    {
        if ($GLOBALS['var']['logged_in'])
        {
            if (!$act) $act = $GLOBALS['var']['act'];
            $user_rights = json_decode($GLOBALS['var']['user_rights']);
            if (@array_key_exists($act, $user_rights))
            {
                if (@array_key_exists($do, $user_rights->$act) && $user_rights->$act->$do) return true;
            }
        }
        return false;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm strip_input
 *
 * Chuyển các ký tự đặc biệt (", ', \, <, >) sang mã tương ứng
 *
 * @access  public
 * @param   string
 * @return  string
 */
if ( ! function_exists('strip_input'))
{
    function strip_input($text)
    {
        if (QUOTES_GPC) $text = stripslashes($text);
        $search = array('"', '\'', '\\', '<', '>'); 
        $replace = array('&quot;', '&#39;', '&#92;', '&lt;', '&gt;');
        $text = str_replace($search, $replace, $text);
        unset($search, $replace);
        return $text;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm destrip_input
 *
 * Chuyển các mã ('&quot;', '&#39;', '&#92;', '&lt;', '&gt;') sang ký tự tương ứng
 *
 * @access  public
 * @param   string
 * @return  string
 */
if ( ! function_exists('destrip_input'))
{
    function destrip_input($text)
    {
        if (QUOTES_GPC) $text = stripslashes($text);
        $search = array('&quot;', '&#39;', '&#92;', '&lt;', '&gt;'); 
        $replace = array('"', '\'', '\\', '<', '>');
        $text = str_replace($search, $replace, $text);
        unset($search, $replace);
        return $text;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm viet_decode
 *
 * Chuyển văn bản có dấu sang không dấu
 *
 * @access  public
 * @param   string
 * @return  string in lowercase
 */
if ( ! function_exists('viet_decode'))
{
    function viet_decode($str)
    {
        $chars = array(
            'a' =>  array('ấ','ầ','ẩ','ẫ','ậ','Ấ','Ầ','Ẩ','Ẫ','Ậ','ắ','ằ','ẳ','ẵ','ặ','Ắ','Ằ','Ẳ','Ẵ','Ặ','á','à','ả','ã','ạ','â','ă','Á','À','Ả','Ã','Ạ','Â','Ă'),
            'e' =>  array('ế','ề','ể','ễ','ệ','Ế','Ề','Ể','Ễ','Ệ','é','è','ẻ','ẽ','ẹ','ê','É','È','Ẻ','Ẽ','Ẹ','Ê'),
            'i' =>  array('í','ì','ỉ','ĩ','ị','Í','Ì','Ỉ','Ĩ','Ị'),
            'o' =>  array('ố','ồ','ổ','ỗ','ộ','Ố','Ồ','Ổ','Ô','Ộ','ớ','ờ','ở','ỡ','ợ','Ớ','Ờ','Ở','Ỡ','Ợ','ó','ò','ỏ','õ','ọ','ô','ơ','Ó','Ò','Ỏ','Õ','Ọ','Ô','Ơ'),
            'u' =>  array('ứ','ừ','ử','ữ','ự','Ứ','Ừ','Ử','Ữ','Ự','ú','ù','ủ','ũ','ụ','ư','Ú','Ù','Ủ','Ũ','Ụ','Ư'),
            'y' =>  array('ý','ỳ','ỷ','ỹ','ỵ','Ý','Ỳ','Ỷ','Ỹ','Ỵ'),
            'd' =>  array('đ','Đ'),
            '' =>   array('–','?','"',':','<','>','/','\\','{','}','{','[',']','$','%','^','&','*','(',')','!')
        );
        foreach ($chars as $key => $arr)
        {
            foreach ($arr as $val)
            {
                $str = str_replace($val, $key, $str);
            }
            unset($arr);
        }
        unset($chars);
        return trim($str);
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm format_size
 *
 * Định dạng kiểu hiển thị dung lượng lưu trữ (B, KB, MB, GB, TB, PB)
 *
 * @access  public
 * @param   int byte size
 * @return  string size
 */
if ( ! function_exists('format_size'))
{
    function format_size($size) {
        $mod = 1024;
        $units = explode(' ','B KB MB GB TB PB');
        for ($i = 0; $size > $mod; $i++) {
            $size /= $mod;
        }
        unset($mod);
        return round($size, 2).' '.$units[$i];
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm goodfile
 *
 * Kiểm tra sự tồn tại một tệp tin
 *
 * @access  public
 * @param   string file path
 * @return  true/false
 */
if ( ! function_exists('goodfile'))
{
    function goodfile($file)
    { 
        $invalidChars = array('\'','"',';','>','<','.php'); 
        $file = str_replace($invalidChars, '', $file);
        unset($invalidChars);
        if (file_exists($file) && is_file($file)) return true; 
        return false;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm file_extension
 *
 * Lấy phần mở rộng một tệp tin
 *
 * @access  public
 * @param   string file name
 * @return  string
 */
if ( ! function_exists('file_extension'))
{
    function file_extension($file)
    {
        return @end(explode('.', strtolower($file)));
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm upload
 *
 * Upload một tệp tin
 *
 * @access  public
 * @param   string file name
 * @param   string upload path
 * @param   string allowed types
 * @param   int max size
 * @param   int max width
 * @param   int max height
 * @return  array upload data : Mảng thông tin dữ liệu upload
 */
if ( ! function_exists('upload'))
{
    function upload($field = '', $file_name, $upload_path, $allowed_types = 'gif|jpg|png|swf', $max_size = '2000', $max_width = '2400', $max_height = '2400')
    {
        $ci =& get_instance();
        $file_name =  $file_name.($field ? '-'.$field : '').'-'.time();
        if($field == '') $field = 'userfile';
        $config['upload_path'] = $upload_path;
        $config['allowed_types'] = $allowed_types;
        $config['max_size'] = $max_size;
        $config['max_width']  = $max_width;
        $config['max_height']  = $max_height;
        $config['file_name'] = $file_name;
        $config['overwrite'] = TRUE;
        $ci->upload->initialize($config);
        if($ci->upload->do_upload($field))
        {
            return $ci->upload->data();
        }
        else
        {
            return false;
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm make_thumb
 *
 * Tạo ảnh thumb từ ảnh gốc
 *
 * @access  public
 * @param   string origin image path
 * @param   string new image thumb path
 * @param   int new width
 * @param   int new height
 * @return  null
 */
if ( ! function_exists('make_thumb'))
{
    function make_thumb($img_name, $filename, $new_w, $new_h)
    {
        $ext = file_extension($img_name);
        list($old_x, $old_y) = getimagesize($img_name);
        $ratio1 = $old_x / $new_w;
        $ratio2 = $old_y / $new_h;
        if ($ratio1 > $ratio2)
        {
            $thumb_w = $new_w;
            $thumb_h = $old_y / $ratio1;
        } else {
            $thumb_h = $new_h;
            $thumb_w = $old_x / $ratio2;
        } 
        $dst_img = imagecreatetruecolor($thumb_w, $thumb_h);
        if ($ext == 'jpg' || $ext == 'jpeg')
        {
            $src_img = imagecreatefromjpeg($img_name);
        }
        else if ($ext == 'gif')
        {
            imagecolortransparent($dst_img, imagecolorallocate($dst_img, 0, 0, 0));
            $src_img = imagecreatefromgif($img_name);
        }
        else if ($ext == 'png')
        {
            imagecolortransparent($dst_img, imagecolorallocate($dst_img, 0, 0, 0));
            imagealphablending($dst_img, false);
            imagesavealpha($dst_img, true);
            $src_img = imagecreatefrompng($img_name);
        }
        if ($src_img)
        {
            imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
            if ($ext == 'png') imagepng($dst_img, $filename);
            else imagejpeg($dst_img, $filename, 100);
            imagedestroy($dst_img);
            imagedestroy($src_img);
        }
        unset($ext, $old_x, $old_y, $ratio1, $ratio2, $thumb_h, $thumb_w, $dst_img, $src_img);
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm sig_logo
 *
 * Đính logo vào ảnh
 *
 * @access  public
 * @param   string origin image path
 * @param   string new image path
 * @param   [, int type logo] (1 = color logo/2 = gray logo)
 * @param   [, int position]
 * @return  null
 */
if ( ! function_exists('sig_logo'))
{
    function sig_logo($input, $output, $type_logo = 1, $pos_logo = 1, $logo = '')
    {
        $type = file_extension($input);
        if ($type == 'jpg') $src_img = @imagecreatefromjpeg($input);
        else if ($type == 'png') $src_img = @imagecreatefrompng($input);
        if ($src_img)
        {
            if ($type_logo == 1) $pow_img = @imagecreatefrompng(LOGO_COLOR);
            if ($type_logo == 2) $pow_img = @imagecreatefrompng(LOGO_GRAY);
            if ($pow_img)
            {
               $src_w = @imagesx($src_img);
                $src_h = @imagesy($src_img);
                $pow_w = @imagesx($pow_img);
                $pow_h = @imagesy($pow_img);
                $dst_img = @imagecreatetruecolor($src_w, $src_h);
                @imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h);
                if ($pos_logo == 1) @imagecopyresampled($dst_img, $pow_img, $src_w - 5 - $pow_w, $src_h - 5 - $pow_h, 0, 0, $pow_w, $pow_h, $pow_w, $pow_h);
                if ($pos_logo == 2) @imagecopyresampled($dst_img, $pow_img, 5, $src_h - 5 - $pow_h, 0, 0, $pow_w, $pow_h, $pow_w, $pow_h);
                if ($pos_logo == 3) @imagecopyresampled($dst_img, $pow_img, $src_w - 5 - $pow_w, 5, 0, 0, $pow_w, $pow_h, $pow_w, $pow_h);
                if ($pos_logo == 4) @imagecopyresampled($dst_img, $pow_img, 5, 5, 0, 0, $pow_w, $pow_h, $pow_w, $pow_h);
                if ($pos_logo == 5) @imagecopyresampled($dst_img, $pow_img, $src_w / 2 - $pow_w / 2, $src_h / 2 - $pow_h / 2, 0, 0, $pow_w, $pow_h, $pow_w, $pow_h);
                if ($type == "png") @imagepng($dst_img, $output, 100);
                else @imagejpeg($dst_img, $output, 100);
                @imagedestroy($dst_img);
            }
        }
        unset($type, $src_img, $pow_img, $src_h, $src_w, $pow_h, $pow_w, $dst_img);
    }
}
// ------------------------------------------------------------------------

/**
 * Hàm create_grayscale
 *
 * Tạo ảnh gray mode từ ảnh gốc
 *
 * @access  public
 * @param   string origin image path
 * @param   string new images gray path
 * @return  null
 */
if ( ! function_exists('create_grayscale'))
{
    function create_grayscale($img_file, $new_img_file)
    {
        $type = file_extension($img_file);
        if ($type == 'jpg' || $type == 'jpeg') $im = imagecreatefromjpeg($img_file);
        if ($type == 'png') $im = imagecreatefrompng($img_file);
        if ($type == 'gif') $im = imagecreatefromgif($img_file);
        if ($im && imagefilter($im, IMG_FILTER_COLORIZE, 128, 128, 128))
        {
            if ($type == 'png') imagepng($im, $new_img_file, 100);
            else imagejpeg($im, $new_img_file, 100);
            imagedestroy($im);
        }
        unset($type, $im);
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm url_uri
 *
 * Khởi tạo request uri bổ sung cho url từ mảng tham chiếu
 *
 * @access  public
 * @param   array : ('uri key' => 'uri value', ...)
 * @param   [, array] : array key to remove
 * @return  string request uri
 */
if ( ! function_exists('url_uri'))
{
    function url_uri($uri, $remove = array())
    {
        $string = '';
        if (is_array($uri))
        {
            foreach ($uri as $key => $value)
            {
                if ($value)
                {
                    if ((is_array($remove) && !in_array($key, $remove)) || (!is_array($remove) && $key != $remove)) $string .= ($string == '' ? '?' : '&').$key.'='.$value;
                }
            }
        }
        else if($uri)
        {
            $string .= '?'.$uri;
        }
        return $string;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm folder_size
 *
 * Tính toán dung lượng một thư mục
 *
 * @access  public
 * @param   string folder path
 * @return  int size
 */
if ( ! function_exists('folder_size'))
{
    function folder_size($path)
    {
        $total_size = 0;
        $files = @scandir($path);
        if (!is_array($files))
        {
            return 0;
        }
        foreach ($files as $t)
        {
            if (is_dir(rtrim($path, '/') . '/' . $t))
            {
                if ($t <> '.' && $t <> '..')
                {
                  $size = @folder_size(rtrim($path, '/') . '/' . $t);
                  $total_size += $size;
                  unset($size);
                }
            }
            else
            {
              $size = @filesize(rtrim($path, '/') . '/' . $t);
              $total_size += $size;
              unset($size);
            }
            unset($t);
        }
        unset($files);
        return $total_size;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm doiso
 *
 * Đọc số bằng chữ
 *
 * @access  public
 * @param   int number
 * @return  string text of num
 */
if ( ! function_exists('doiso'))
{
    function doiso($so)
    { 
        if (($so < 0) || ($so > 999999999999))
        {
            return $so;
        }
        $Ty = floor($so / 1000000000);/* Tỷ  */
        $so -= $Ty * 1000000000;
        $Gn = floor($so / 1000000);  /* Triệu (giga) */ 
        $so -= $Gn * 1000000; 
        $kn = floor($so / 1000);     /* Ngàn (kilo) */ 
        $so -= $kn * 1000; 
        $Hn = floor($so / 100);      /* Trăm (hecto) */ 
        $so -= $Hn * 100; 
        $Dn = floor($so / 10);       /* Mười (deca) */ 
        $n = $so % 10;             
        $res = ''; 
        if ($Ty) $res .= doiso($Ty) . ' tỷ';    
        if ($Gn)
        { 
            $res .= (empty($res) ? '' : ' ') .
            doiso($Gn) . ' triệu'; 
        } 
        if ($kn)
        { 
            $res .= (empty($res) ? '' : ' ') . 
            doiso($kn) . ' ngàn'; 
        } 
        if ($Hn)
        { 
            $res .= (empty($res) ? '' : ' ') . 
            doiso($Hn) . ' trăm'; 
        } 
        $mot = array('', 'một', 'hai', 'ba', 'bốn', 'năm', 'sáu', 'bảy', 'tám', 'chín', 'mười', 'mười một', 'mười hai', 'mười ba', 'mười bốn', 'mười lăm', 'mười sáu', 'mười bảy', 'mười tám', 'mười chín'); 
        $mot2 = array('', 'mốt', 'hai', 'ba', 'bốn', 'lăm', 'sáu', 'bảy', 'tám', 'chín', 'mười', 'mười một', 'mười hai', 'mười ba', 'mười bốn', 'mười lăm', 'mười sáu', 'mười bảy', 'mười tám', 'mười chín'); 
        $hangmuoi = array('', '', 'hai mươi', 'ba mươi', 'bốn mươi', 'năm mươi', 'sáu mươi', 'bảy mươi', 'tám mươi', 'chín mươi'); 
        if ($Dn || $n)
        { 
            if (!empty($res)) $res .= ' '; 
            if ($Dn < 2) $res .= $mot[$Dn * 10 + $n]; 
            else
            { 
                $res .= $hangmuoi[$Dn]; 
                if ($n) $res .= ' ' . $mot2[$n]; 
            } 
        } 
        if (empty($res)) $res = 'không';
        return $res; 
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm strtitle
 *
 * Định dạng chuỗi utf-8 in hoa ký tự đầu
 *
 * @access  public
 * @param   string text utf-8
 * @return  String Text Utf-8
 */
if ( ! function_exists('strtitle'))
{
    function strtitle($str)
    {
        return mb_convert_case(trim($str), MB_CASE_TITLE, "UTF-8");
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm strupper
 *
 * Định dạng chuỗi utf-8 in hoa
 *
 * @access  public
 * @param   string text utf-8
 * @return  STRING TEXT UTF-8
 */
if ( ! function_exists('strupper'))
{
    function strupper($str)
    {
        return mb_convert_case(trim($str), MB_CASE_UPPER, "UTF-8");
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm strlower
 *
 * Định dạng chuỗi utf-8 in thường
 *
 * @access  public
 * @param   String Text utf-8
 * @return  string text utf-8
 */
if ( ! function_exists('strlower'))
{
    function strlower($str)
    {
        return mb_convert_case(trim($str), MB_CASE_LOWER, "UTF-8");  
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm randomkeys
 *
 * Tạo chuỗi ký tự ngẫu nhiên gồm chữ in hoa và số
 *
 * @access  public
 * @param   int len
 * @return  string random
 */
if ( ! function_exists('randomkeys'))
{
    function randomkeys($length)
    {
        $key = '';
        $pattern = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        for($i=0; $i < $length; $i++) $key .= $pattern{rand(0,35)};
        unset($pattern);
        return $key;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm randomkeys_number
 *
 * Tạo chuỗi ký tự ngẫu nhiên chỉ gồm số
 *
 * @access  public
 * @param   int len
 * @return  string random number
 */
if ( ! function_exists('randomkeys_number'))
{
    function randomkeys_number($length)
    {
        $key = '';
        $pattern = '1234567890';
        for($i = 0; $i < $length; $i++) $key .= $pattern{rand(0,9)};
        unset($pattern);
        return $key;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm trimlink
 *
 * Cắt chuỗi với độ dài nhập vào
 *
 * @access  public
 * @param   string text : Chuỗi cần cát
 * @param   int lenght : Độ dài giới hạn
 * @param   [, boolean html = false] : Thay thế các mã html
 * @return  html text
 */
if ( ! function_exists('trimlink'))
{
    function trimlink($text, $length, $html = true)
    {
        $dec = array("&", "\"", "'", "\\", '\"', "\'", "<", ">");
        $enc = array("&amp;", "&quot;", "&#39;", "&#92;", "&quot;", "&#39;", "&lt;", "&gt;");
        if($html) $text = str_replace($enc, $dec, $text);
        if(strlen($text) > $length) {
            $len=0;
            $arr = explode(" ", $text);
            $newtext = "";
            if(sizeof($arr) > 1) {
                for($i=0; $i<sizeof($arr); $i++){
                    if($len < $length - 3) {
                        $newtext .= $arr[$i]." ";
                        $len += strlen($arr[$i]) + 1;
                    }
                }
            } else {
                $newtext = substr($arr[0], 0, $length);
            }
            unset($i, $len, $arr, $dec, $enc);
            return $newtext."...";
        } else {
           unset($dec, $enc);
           return $text;
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm week_of_month
 *
 * Tính tuần thứ mấy trong tháng từ chuỗi ngày tháng tương ứng
 *
 * @access  public
 * @param   datetime date
 * @return  int index of week in month
 */
if ( ! function_exists('week_of_month'))
{
    function week_of_month($date)
    {
        $date_parts = explode('-', $date);
        $date_parts[2] = '01';
        $first_of_month = implode('-', $date_parts);
        $day_of_first = date('N', strtotime($first_of_month));
        $day_of_month = date('j', strtotime($date));
        return floor(($day_of_first + $day_of_month - 1) / 7) + 1;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm th_of_day
 *
 * Lấy thứ tương ứng của ngày nhập vào
 *
 * @access  public
 * @param   string ngay
 * @param   string thang
 * @param   string name
 * @return  int chỉ số thứ
 */
if ( ! function_exists('th_of_day'))
{
    function th_of_day($ngay, $thang, $nam)
    {
        $jd = cal_to_jd(CAL_GREGORIAN, $thang, $ngay, $nam);
        return jddayofweek($jd, 0);
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm format_time
 *
 * Định dạng thời gian với số phút nhập vào
 *
 * @access  public
 * @param   int time : Số phút
 * @return  string định dạng 0:00
 */
if ( ! function_exists('format_time'))
{
    function format_time($time)
    {
        return floor($time / 60).':'.str_pad(floor($time % 60), 2, '0', STR_PAD_LEFT);
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm check_module_do
 *
 * Kiểm tra các hành động moddule được phép
 *
 * @access  public
 * @param   module file (don't included .php)
 * @param   do : Hành động (add, edit, del, remove)
 * @return  true/false
 */
if ( ! function_exists('check_module_do'))
{
    function check_module_do($act = '', $do = '')
    {
        if (!$act) $act = $GLOBALS['var']['act'];
        $rights = get_data('modules', 'file = "'.$act.'"', 'rights');
        $dos = json_decode($rights);
        if (@array_key_exists($do, $dos) && $dos->$do)
        {
            return true;
        }
        return false;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm strip_mstags
 *
 * Thay thế các tags xấu khi copy text từ tệp ms word
 *
 * @access  public
 * @param   string text : Chuỗi cần thay thế
 * @return  html text
 */
if ( ! function_exists('strip_mstags'))
{
    function strip_mstags($html)
    {
        $html = preg_replace('/<p style="(.+?)">(.+?)<\/p>/i', "<p>$2</p>", $html);
        $html = preg_replace('/<p class="(.+?)">(.+?)<\/p>/i', "<p>$2</p>", $html);
        $html = preg_replace('/<!--(.|\s)*?-->/', "", $html);
        $html = str_replace('<p>&nbsp;</p>', '', $html);
        $html = str_replace('<p class="MsoNormal"></p>', '', $html);
        $html = str_replace('<span></span>', '', $html);
        $html = trim(str_replace('<p></p>', '', $html));
        return $html;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm saveimg
 *
 * Lưu ảnh từ web về hosting
 *
 * @access  public
 * @param   string imglink : Liên kết tới ảnh
 * @param   string dir : Thư mục lưu
 * @param   [, boolean made_thumb = false] : Tạo ảnh nhỏ
 * @param   [, boolean thumb_w = 240] : Chiều rộng ảnh nhỏ
 * @param   [, boolean thumb_h = 240] : Chiều cao ảnh nhỏ
 * @param   [, boolean gallery_w = 90] : Chiều rộng ảnh thư viện
 * @param   [, boolean gallery_h = 90] : Chiều cao ảnh thư viện
 * @return  string image file
 */
if ( ! function_exists('saveimg'))
{
    function saveimg($imglink, $dir, $made_thumb = false, $thumb_w = 240, $thumb_h = 240, $gallery_w = 90, $gallery_h = 90)
    {
        $img = @file_get_contents($imglink);
        $img_name = str_replace('%20', '-', end(explode('/', $imglink)));
        $file = $dir.$img_name;
        if (@file_put_contents($file, $img))
        {
            if ($made_thumb)
            {
                $thumb = $dir.'thumbs/'.$img_name;
                $gallery = $dir.'gallery/'.$img_name;
                @make_thumb($file, $thumb, $thumb_w, $thumb_w);
                @make_thumb($file, $gallery, $gallery_w, $gallery_h);
            }
            return $img_name;
        }
        else
        {
            return $imglink;
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm getnews_content
 *
 * Lấy nội dung một tin tức
 *
 * @access  public
 * @param   string news_url : Liên kết tới tin
 * @param   string prefix : Chuỗi phân tách đầu
 * @param   string suffix : Chuỗi phân tách cuối
 * @return  html content
 */
if ( ! function_exists('getnews_content'))
{
    function getnews_content($news_url, $prefix, $suffix)
    {
        $html = @file_get_contents($news_url);
        if (!$html)
        {
            return false;
        }
        $content = @end(@explode($prefix, $html));
        $content = @explode($suffix, $content);
        return $content[0];
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm getnews_images
 *
 * Lưu ảnh về host từ nội dung một tin tức
 *
 * @access  public
 * @param   string content : Nội dung tin
 * @param   string dir : Thư mục lưu ảnh
 * @return  html content
 */
if ( ! function_exists('getnews_images'))
{
    function getnews_images($content, $dir)
    {
        preg_match_all('/<img[^>]+>/i', $content, $aMatches);
        if (is_array($aMatches) && count($aMatches))
        {
            $imgs = array();
            foreach($aMatches[0] as $img_tag)
            {
                preg_match_all('/src=("[^"]*")/i', $img_tag, $imgs[]);
            }
            foreach($imgs as $img)
            {
                $imglink = str_replace(array('"',"'"), '', $img[1][0]);
                $img_name = saveimg($imglink, $dir);
                $content = str_replace($imglink, '../../'.$dir.$img_name, $content);
            }
        }
        return $content;
    }
}


// ------------------------------------------------------------------------

/**
 * Hàm get_price
 *
 * Lấy giá theo số lượng từ list giá
 *
 * @access  public
 * @param   int giá sản phẩm
 * @param   int số lượng mua
 * @param   string pricelist danh sách giá theo số lượng
 * @return  int giá
 */
if ( ! function_exists('get_price'))
{
    function get_price($price, $qty, $pricelist = '')
    {
        $ci =& get_instance();
        $pricelists = explode("\n", trim($pricelist));
        if($pricelist && count($pricelists) > 1)
        {
            $price = 0;
            for($n=0; $n < count($pricelists); $n++)
            {
                $pricelist = explode(':', $pricelists[$n]);
                $ranges = explode('-', $pricelist[0]);
                if($qty >= trim($ranges[0]) && (!empty($ranges[1]) && $qty <= trim($ranges[1]))) $price = $pricelist[1];
            }
            if($price == 0)
            {
                $n = count($pricelists) - 1;
                $pricelist = explode(':', $pricelists[$n]);
                $ranges = explode('-', $pricelist[0]);
                $price = $pricelist[1];
            }
        }
        return $price;
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm phpexcel_align
 *
 * Đặt thuộc tính canh lề trái phải cho cell trong xuất excel
 *
 * @access  public
 * @param   object obj excel
 * @param   string / array ele tên cell
 * @param   string align lề
 * @return  null
 */
if ( ! function_exists('phpexcel_align'))
{
    function phpexcel_align($obj, $ele, $align = 'center')
    {
        if (!is_object($obj))
        {
            return false;
        }
        if ($align == 'left')
        {
            $align = PHPExcel_Style_Alignment::HORIZONTAL_LEFT;
        }
        else if ($align == 'right')
        {
            $align = PHPExcel_Style_Alignment::HORIZONTAL_RIGHT;
        }
        else if ($align == 'center')
        {
            $align = PHPExcel_Style_Alignment::HORIZONTAL_CENTER;
        }
        if (is_array($ele))
        {
            foreach ($ele as $key => $e)
            {
                if ($align == 'wrap')
                {
                    $obj->getStyle($e)->getAlignment()->setWrapText(true);
                }
                else
                {
                    $obj->getStyle($e)->getAlignment()->setHorizontal($align);
                }
            }
        }
        else
        {
            if ($align == 'wrap')
            {
                $obj->getStyle($ele)->getAlignment()->setWrapText(true);
            }
            else
            {
                $obj->getStyle($ele)->getAlignment()->setHorizontal($align);
            }
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm phpexcel_valign
 *
 * Đặt thuộc tính canh lề trên dưới cho cell trong xuất excel
 *
 * @access  public
 * @param   object obj excel
 * @param   string / array ele tên cell
 * @param   string valign lề
 * @return  null
 */
if ( ! function_exists('phpexcel_valign'))
{
    function phpexcel_valign($obj, $ele, $valign = 'center')
    {
        if (!class_exists('php_excel')) {
            return false;
        }
        if (!is_object($obj))
        {
            return false;
        }
        if ($valign == 'top')
        {
            $valign = PHPExcel_Style_Alignment::VERTICAL_TOP;
        }
        else if ($valign == 'bottom')
        {
            $valign = PHPExcel_Style_Alignment::VERTICAL_BOTTOM;
        }
        else
        {
            $valign = PHPExcel_Style_Alignment::VERTICAL_CENTER;
        }
        if (is_array($ele))
        {
            foreach ($ele as $key => $e)
            {
                $obj->getStyle($e)->getAlignment()->setVertical($valign);
            }
        }
        else
        {
            $obj->getStyle($ele)->getAlignment()->setVertical($valign);
        }
    }
}

// ------------------------------------------------------------------------

/**
 * Hàm phpexcel_merge
 *
 * Dồn các cell trong xuất excel
 *
 * @access  public
 * @param   object obj excel
 * @param   string / array ele tên cell
 * @return  null
 */
if ( ! function_exists('phpexcel_merge'))
{
    function phpexcel_merge($obj, $ele)
    {
        if (!class_exists('php_excel')) {
            return false;
        }
        if (!is_object($obj))
        {
            return false;
        }
        if (is_array($ele))
        {
            foreach ($ele as $key => $e)
            {
                $obj->mergeCells($e);
            }
        }
        else
        {
            $obj->mergeCells($ele);
        }
    }
}

/**
 * Hàm phpexcel_height
 *
 * Đặt độ cao cell trong xuất excel
 *
 * @access  public
 * @param   object obj excel
 * @param   string / array ele tên cell
 * @param   int h chiều cao cell
 * @return  null
 */
if ( ! function_exists('phpexcel_height'))
{
    function phpexcel_height($obj, $ele, $h)
    {
        if (!class_exists('php_excel')) {
            return false;
        }
        if (!is_object($obj))
        {
            return false;
        }
        if (is_array($ele))
        {
            foreach ($ele as $key => $e)
            {
                $obj->getRowDimension($e)->setRowHeight($h);
            }
        }
        else
        {
            $obj->getRowDimension($ele)->setRowHeight($h);
        }
    }
}

/**
 * Hàm phpexcel_width
 *
 * Đặt độ rộng cell trong xuất excel
 *
 * @access  public
 * @param   object obj excel
 * @param   string / array ele tên cell
 * @param   int h chiều cao cell
 * @return  null
 */
if ( ! function_exists('phpexcel_width'))
{
    function phpexcel_width($obj, $ele)
    {
        if (!class_exists('php_excel')) {
            return false;
        }
        if (!is_object($obj))
        {
            return false;
        }
        if (is_array($ele))
        {
            foreach ($ele as $key => $e)
            {
                $e = explode(',', $e);
                $c = explode(':', $e[0]);
                if (count($c) > 1)
                {
                    foreach ($c as $key => $i)
                    {
                        $obj->getColumnDimension($i[0])->setWidth($e[1]);
                    }
                }
                else
                {
                    $obj->getColumnDimension($e[0])->setWidth($e[1]);
                }
            }
        }
        else
        {
            $ele = explode(',', $ele);
            $c = explode(':', $ele[0]);
            if (count($c) > 1)
            {
                foreach ($c as $key => $i)
                {
                    $obj->getColumnDimension($i[0])->setWidth($ele[1]);
                }
            }
            else
            {
                $obj->getColumnDimension($ele[0])->setWidth($ele[1]);
            }
        }
    }
}

/**
 * Hàm phpexcel_img
 *
 * Chèn ảnh trong xuất excel
 *
 * @access  public
 * @param   object obj excel
 * @param   string ele tên cell
 * @param   string img nguồn ảnh
 * @param   int w chiều rộng ảnh
 * @param   int h chiều cao ảnh
 * @param   int x vị trí canh lề trái
 * @param   int y vị trí canh lề trên
 * @return  null
 */
if ( ! function_exists('phpexcel_img'))
{
    function phpexcel_img($obj, $ele, $img, $w, $h, $x, $y)
    {
        if (!class_exists('php_excel')) {
            return false;
        }
        if (!is_object($obj))
        {
            return false;
        }
        $objDrawing = new PHPExcel_Worksheet_Drawing();
        $objDrawing->setWorksheet($obj);
        $objDrawing->setPath($img);
        $objDrawing->setHeight($h);
        $objDrawing->setWidth($w);
        $objDrawing->setCoordinates($ele);
        $objDrawing->setOffsetX($x)->setOffsetY($y);
    }
}

/**
 * Hàm phpexcel_format
 *
 * Định dạng cell trong xuất excel
 *
 * @access  public
 * @param   object obj excel
 * @param   string ele tên cell
 * @param   array format mảng định dạng
 * @return  null
 */
if ( ! function_exists('phpexcel_format'))
{
    function phpexcel_format($obj, $ele, $format)
    {
        if (!class_exists('php_excel')) {
            return false;
        }
        if (!is_object($obj))
        {
            return false;
        }
        $fontArr = array();
        if (!empty($format['font']))
        {
            $font = explode(',', $format['font']);
            foreach ($font as $key => $value)
            {
                $f = explode(':', $value);
                if ($f[0] == 'color')
                {
                    $fontArr[$f[0]] = array('rgb' => str_replace('#', '', $f[1]));
                }
                else
                {
                    $fontArr[$f[0]] = $f[1];
                }
            }
        }
        $fillArr = array();
        if (!empty($format['fill']))
        {
            $fill = explode(',', $format['fill']);
            foreach ($fill as $key => $value)
            {
                $f = explode(':', $value);
                if ($f[0] == 'color')
                {
                    $fillArr[$f[0]] = array('rgb' => str_replace('#', '', $f[1]));
                }
                else if ($f[0] == 'type')
                {
                    if ($f[1] == 'solid')
                    {
                        $fillArr[$f[0]] = PHPExcel_Style_Fill::FILL_SOLID;
                    }
                }
            }
        }
        $borderArr = array();
        if (!empty($format['border']))
        {
            $border = explode(',', $format['border']);
            foreach ($border as $key => $value)
            {
                $f = explode(':', $value);
                if ($f[1] == 'solid')
                {
                    $borderArr[$f[0]] = array(
                        'style' => PHPExcel_Style_Border::BORDER_THIN
                    );
                }
                if (!empty($f[2]))
                {
                    $borderArr[$f[0]] = array(
                        'color' => array('rgb' => str_replace('#', '', $f[1]))
                    );
                }
            }
        }
        $style = array(
            'font' => $fontArr,
            'fill' => $fillArr,
            'borders' => $borderArr
        );
        if (is_array($ele))
        {
            foreach ($ele as $key => $e)
            {
                $obj->getStyle($e)->applyFromArray($style);
            }
        }
        else
        {
            $obj->getStyle($ele)->applyFromArray($style);
        }
    }
}

/* End of file func_helper.php */
/* Location: ./application/helpers/func_helper.php */